package com.example.lib.muchthread;

/**
 * (同步方法)
 * 需求：
 * 银行有一个金库。
 * 有两个储户，分别存300元，每次存100，存3次。
 * 目的：该程序是否有安全问题，如果有，如何解决？
 *
 * 如何找问题？
 * 1.明确哪些代码是多线程运行代码。
 * 2.明确共享数据。
 * 3.明确多线程运行代码中哪些语句是操作共享数据的。
 */

public class h_bank_sync_method_137 {
    public static void main(String[] args) {
        Cus137 cus=new Cus137();
//        Cus137_2 cus2=new Cus137_2();
        Thread t1=new Thread(cus);
        Thread t2=new Thread(cus);

        t1.start();
        t2.start();
    }
}

class Bank137 {
    private int sum;
    public synchronized void add(int n) {
        sum = sum + n;
        try {
            Thread.sleep(10);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("sum=" + sum);
    }
}

class Cus137 implements Runnable {
    private Bank137 b = new Bank137();

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            b.add(100);
        }
    }
}

class Cus137_2 implements Runnable{
    private Bank137 b=new Bank137();

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            b.add(200);
        }
    }
}
